﻿using System;
using System.Collections.Generic;
using System.Web;
using NHibernate.Mapping.Attributes;

namespace VemTransporte.Models.Basica
{
    [Class(Table = "Empresa")]
    public class Empresa
    {
        #region Atributos
        private int id = 0;
        private string logoTipo;
        private string nomeFantasia;
        private string nomeRazaoSocial;
        private string cnpj;
        private string inscricaoEstadual;
        private string email;
        private string senha;
        private string lembreteSenha;
        private string tipoAcesso;//ADMSITE, ADMEMPRESA, ADMTRANSPORTEPUBLICO
        private IList<EmpresaTelefone> _EmpresaTelefones;
        private IList<Veiculo> _Veiculos;
        private Endereco _Endereco;
        #endregion

        #region Propriedades
        [Id(Name = "Id", Column = "PK_IdEmpresa")]
        [Generator(1, Class = "native")]
        public virtual int Id
        {
            get { return id; }
            set { id = value; }
        }

        [Property(Column = "EMP_LogoTipo")]
        public virtual string LogoTipo
        {
          get { return logoTipo; }
          set { logoTipo = value; }
        }

        [Property(Column = "EMP_NomeFantasia")]
        public virtual string NomeFantasia
        {
            get { return nomeFantasia; }
            set { nomeFantasia = value; }
        }

        [Property(Column = "EMP_NomeRazaoSocial")]
        public virtual string NomeRazaoSocial
        {
            get { return nomeRazaoSocial; }
            set { nomeRazaoSocial = value; }
        }

        [Property(Column = "EMP_Cnpj")]
        public virtual string Cnpj
        {
            get { return cnpj; }
            set { cnpj = value; }
        }

        [Property(Column = "EMP_InscricaoEstadual")]
        public virtual string InscricaoEstadual
        {
            get { return inscricaoEstadual; }
            set { inscricaoEstadual = value; }
        }

        [Property(Column = "EMP_EMail")]
        public virtual string Email
        {
          get { return email; }
          set { email = value; }
        }

        [Property(Column = "EMP_Senha")]
        public virtual string Senha
        {
            get { return senha; }
            set { senha = value; }
        }

        [Property(Column = "EMP_LembreteSenha")]
        public virtual string LembreteSenha
        {
            get { return lembreteSenha; }
            set { lembreteSenha = value; }
        }

        /// <summary>
        /// <example>Tipo de acesso</example>
        /// Empresa de onibus='Usuário'
        /// Site='Administrador'
        /// </summary>
        [Property(Column = "EMP_TipoAcesso")]
        public virtual string TipoAcesso
        {
            get { return tipoAcesso; }
            set { tipoAcesso = value; }
        }

        [ManyToOne(Name="Endereco", Column="FK_IdEndereco", ClassType=typeof(Endereco), Fetch=FetchMode.Join)]
        public virtual Endereco Endereco
        {
            get { return this._Endereco; }
            set { this._Endereco = value; }
        }

        [Bag(Fetch = CollectionFetchMode.Join, Cascade = "all-delete-orphan", Inverse = true)]
        [Key(1, Column = "FK_IdEmpresa")]
        [OneToMany(2, ClassType = typeof(EmpresaTelefone))]
        public virtual IList<EmpresaTelefone> EmpresaTelefones
        {
            get { return this._EmpresaTelefones; }
            set { this._EmpresaTelefones = value; }             
        }

        public virtual void AddTelefone(EmpresaTelefone telefone)
        {
            telefone.Empresa = this;
            this._EmpresaTelefones.Add(telefone);
        }

        [Bag(Fetch = CollectionFetchMode.Join, Cascade = "all-delete-orphan", Inverse = true)]
        [Key(1, Column = "FK_IdEmpresa")]
        [OneToMany(2, ClassType = typeof(Veiculo))]
        public virtual IList<Veiculo> Veiculos
        {
            get { return _Veiculos; }
            set { _Veiculos = value; }
        }

        public virtual void AddVeiculo(Veiculo veiculo)
        {
            veiculo.Empresa = this;
            this._Veiculos.Add(veiculo);
        }
        #endregion

        #region Constructores
        public Empresa() { }
        #endregion
    }
}